10922. Степень девятки
Известно, что число делится на 9,
если его сумма цифр делится на 9. В задаче требуется определить, на какую
степень девятки делится заданное число n.
Вход. Каждая
строка содержит число, состоящее из не более чем 1000 цифр. Последнее число
равно 0 и не обрабатывается.
Выход. Для каждого числа выяснить,
делится ли оно на 9. Если делится, то найти степень девятки, на которую делится
число. Результат выводить согласно формату, приведенному в примере.
999999999999999999999
9
9999999999999999999999999999998
0
Пример выхода
999999999999999999999
is a multiple of 9 and has 9-degree 3.
9 is a
multiple of 9 and has 9-degree 1.
9999999999999999999999999999998
is not a multiple of 9.
элементарные вычисления
Вычисляем сумму цифр sum входного числа. Если она не делится
на 9, то и число не делится на 9. Иначе в цикле пока sum делится на 9, присваиваем переменной sum сумму его цифр. Количество итераций цикла равно степени девятки,
на которую делится входное число.
Входное число храним в массиве s.
char s[1001];
Функция check возвращает сумму
цифр числа s.
int check(int s)
{
int res = 0;
while (s > 0)
{
res += s % 10;
s /= 10;
}
return res;
}
Основной цикл программы. Вводим
число, в переменной sum находим его
сумму цифр.
while(gets(s),s[0]!='0')
{
for(sum=i=0;i<(int)strlen(s);i++)
sum += (s[i] - '0');
Если сумма цифр sum не делится на 9, то и число не
делится на 9.
if (sum % 9 > 0)
{
printf("%s is
not a multiple of 9.\n",s);
continue;
}
В переменной count храним степень девятки, на которую делится тестируемое число.
Пока сумма цифр числа sum делится на
9, присваиваем переменной sum ее
сумму цифр. Количество проведенных итераций count
равно искомой степени девятки, на которую делится входное число.
count = 1;
while(sum > 9)
{
sum = check(sum);
count++;
}
Выводим результат.
printf("%s is a
multiple of 9 and has 9-degree %d.\n",s,count);
}